#!/bin/bash

#CONSTANTES #############
CONFDIR=~/.grupo08/InstalaW5.conf
DEF_LOGEXT=".log"

#Opciones
OPC_P="-p"
OPC_U="-u"
OPC_S="-s"
OPC_T="-t"

#Tipo de mensaje
INFO="I"
ALERTA="A"
ERROR="E"
ERROR_SEVERO="ES"

#Comandos
INICIAR="IniciarW5"
DETECTAR="DetectaW5"
BUSCAR="BuscarW5"
LISTAR="ListarW5"
MIRAR="MirarW5"
MOVER="MoverW5"
#########################

#Se obtiene valores de configuracion
if [ -f $CONFDIR ]; then
	LOGEXT=$(cat "$CONFDIR" |grep "LOGEXT" | cut -f2 -d '=')
	LOGDIR=$(cat "$CONFDIR" | grep "LOGDIR" | cut -f2 -d '=')
else
	LOGEXT="$DEF_LOGEXT"
	LOGDIR="$PWD"
fi

#Funcion Principal - formato de llamada: MirarW5 $1 $2 "$3"
#validacion del numero de parametros
if [ $# -ne 3 ]; then
	echo "Cantidad de parámetros incorrecta."
	echo "Uso: MirarW5 [Comando] [Opción] [Filtro]"	
	echo "$OPC_P N --> muestra las primeras N líneas."
	echo "$OPC_U N --> muestra las últimas N líneas."	
	echo "$OPC_S String --> muestra las líneas que contengan el string solicitado."
	echo "$OPC_T Tipo_De_Mensaje --> muestra las líneas que corresponden a un tipo de mensaje."
	echo " Tipo de Mensaje: $INFO | $ALERTA | $ERROR | $ERROR_SEVERO."
	exit 1
fi

comando=$1
#validacion del comando.
if [ $comando != $INICIAR -a $comando != $DETECTAR -a $comando != $BUSCAR -a $comando != $LISTAR -a $comando != $MIRAR -a $comando != $MOVER ]; then
	echo "Comando inválido. Primer parámetro debe ser $INICIAR | $DETECTAR | $BUSCAR | $LISTAR | $MIRAR | $MOVER."
	exit 1
fi

#validacion de existencia del archivo de log
if [ ! -f "$LOGDIR/$comando$LOGEXT" ]; then
	echo "Archivo de log inexistente para el comando $comando."
	exit 1;
fi

opcion=`echo $2 | tr "[:upper:]" "[:lower:]"`
case $opcion in
#caso: mostrar las primeras lineas.
	$OPC_P)		if [[ $3 == [0-9]* ]]; then
				head -$3 "$LOGDIR/$comando$LOGEXT"
			else
				echo "Filtro incorrecto. Tercer parámetro debe ser un número."
				exit 1			
			fi ;;

#caso: mostrar las ultimas lineas.
	$OPC_U)		if [[ $3 == [0-9]* ]]; then
				tail -$3 "$LOGDIR/$comando$LOGEXT"
			else
				echo "Filtro incorrecto. Tercer parámetro debe ser un número."
				exit 1
		  	fi;;

#caso: mostrar las lineas que contienen el string a buscar -se ignorará el case sensitive.
	$OPC_S)		grep -i "$3" "$LOGDIR/$comando$LOGEXT";;

#caso: mostrar las lineas que correspondan a un tipo de error.
	$OPC_T)		if [ $3 == $INFO -o $3 == $ALERTA -o $3 == $ERROR -o $3 == $ERROR_SEVERO ]; then	
				grep -w "$3" "$LOGDIR/$comando$LOGEXT"
			else
				echo "Filtro incorrecto. Tercer parámetro debe ser $INFO | $ALERTA | $ERROR | $ERROR_SEVERO."
				exit 1
			fi;;

#caso: otros.
	*)	echo "Opción incorrecta. Segundo parámetro debe ser $OPC_P | $OPC_U | $OPC_S | $OPC_T."
		exit 1;;
esac

exit 0
